<%-- 
    Document   : V_Informe
    Created on : 21-feb-2015, 12:00:47
    Author     : JoseHernan
--%>
<%@page import="db.DB_PreguntaTipoEvaluacion"%>
<%@page import="beans.B_PreguntaTipoEvaluacion"%>
<%@page import="db.DB_Amenaza"%>
<%@page import="beans.B_Amenaza"%>
<%@page import="beans.B_Vulnerabilidad"%>
<%@page import="db.DB_Vulnerabilidad"%>
<%@page import="db.DB_RespuestaAuditoria"%>
<%@page import="beans.B_RespuestaAuditoria"%>
<%@page import="db.DB_Pregunta"%>
<%@page import="beans.B_Pregunta"%>
<%@page import="db.DB_ControlAuditoria"%>
<%@page import="beans.B_ControlAuditoria"%>
<%@page import="db.DB_ObjetivoControlAuditoria"%>
<%@page import="beans.B_ObjetivoControlAuditoria"%>
<%@page import="db.DB_DominioAuditoria"%>
<%@page import="beans.B_DominioAuditoria"%>
<%@page import="db.DB_CriterioAuditoria"%>
<%@page import="beans.B_CriterioAuditoria"%>
<%@page import="beans.B_PlanAuditoria"%>
<%@page import="db.DB_PlanAuditoria"%>
<%@page import="beans.B_RolPermiso"%>
<%@page import="db.DB_RolPermiso"%>
<%@page import="java.util.ArrayList"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
    if (session.getAttribute("userName") != null) {
        String userName = session.getAttribute("userName").toString();
        session.setAttribute("userName", userName);
        int idUsuario = Integer.parseInt(session.getAttribute("idUsuario").toString());
        int idPagina = Integer.parseInt(request.getParameter("idPagina").toString());
        ArrayList<B_RolPermiso> listPermisos = DB_RolPermiso.getPermisosPagina(idUsuario, idPagina);
        B_RolPermiso objRolPermiso = listPermisos.get(0);
        boolean List = false;
        boolean New = false;
        boolean Update = false;
        boolean Delete = false;
        for (B_RolPermiso objRolPermiso2 : listPermisos) {
            if (objRolPermiso2.getObjAccionPagina().getObjTipoAccionPagina().getNombre().equals("List")) {
                List = true;
            }
            if (objRolPermiso2.getObjAccionPagina().getObjTipoAccionPagina().getNombre().equals("New")) {
                New = true;
            }
            if (objRolPermiso2.getObjAccionPagina().getObjTipoAccionPagina().getNombre().equals("Update")) {
                Update = true;
            }
            if (objRolPermiso2.getObjAccionPagina().getObjTipoAccionPagina().getNombre().equals("Delete")) {
                Delete = true;
            }
        }
        ArrayList<B_PlanAuditoria> listPlanAuditoria = DB_PlanAuditoria.getPlanAuditoriaActive();
%>
<!-- BEGIN PAGE LEVEL STYLES -->
<!-- END PAGE LEVEL STYLES -->
<!-- BEGIN PAGE HEADER-->
<h3 class="page-title">
    Informe de Auditoría
</h3>
<div class="page-bar">
    <ul class="page-breadcrumb">
        <li>
            <i class="fa fa-home"></i>
            <a href="home.jsp">Home</a>
            <i class="fa fa-angle-right"></i>
        </li>
        <li>
            <a href="#">Informe de Auditoría</a>
        </li>
    </ul>
</div>
<!-- END PAGE HEADER-->
<!-- BEGIN PAGE CONTENT-->
<div class="row">
    <div class="col-md-12">
        <%
            //Si existen auditorías activas
            if (listPlanAuditoria.size() > 0) {
                B_PlanAuditoria objPlanAuditoria = listPlanAuditoria.get(0);
                ArrayList<B_CriterioAuditoria> listCriterioAuditoria = DB_CriterioAuditoria.getListByIdPlanAuditoria(objPlanAuditoria.getId());
                if (listCriterioAuditoria.size() > 0) {
                    for (B_CriterioAuditoria objCriterioAuditoria : listCriterioAuditoria) {
        %>
        <div class="note note-info" style="border-color: #C3C3C3; background-color: #E4E4E4;">
            <h4 class="block">Criterio de Auditoría: <%=objCriterioAuditoria.getNombre()%></h4>
            <%
                ArrayList<B_DominioAuditoria> listDominioAuditoria = DB_DominioAuditoria.getListByIdCriterioAuditoria(objCriterioAuditoria.getId());
                if (listDominioAuditoria.size() > 0) {
                    for (B_DominioAuditoria objDominioAuditoria : listDominioAuditoria) {
            %>
            <div class="note note-info" style="border-color: #C3C3C3; background-color: #E8E8E8;">
                <h4 class="block">Dominio: <%=objDominioAuditoria.getCodigo() + " " + objDominioAuditoria.getNombre()%></h4>
                <%
                    ArrayList<B_ObjetivoControlAuditoria> listObjetivoControlAuditoria = DB_ObjetivoControlAuditoria.getListByIdDominioAuditoria(objDominioAuditoria.getId());
                    if (listObjetivoControlAuditoria.size() > 0) {
                        for (B_ObjetivoControlAuditoria objObjetivoControlAuditoria : listObjetivoControlAuditoria) {
                %>
                <div class="note note-info" style="border-color: #C3C3C3; background-color: #ECECEC;">
                    <h4 class="block">Objetivo de Control: <%=objObjetivoControlAuditoria.getCodigo() + " " + objObjetivoControlAuditoria.getNombre()%></h4>
                    <%
                        ArrayList<B_ControlAuditoria> listControlAuditoria = DB_ControlAuditoria.getListByIdObjetivoControl(objObjetivoControlAuditoria.getId());
                        if (listControlAuditoria.size() > 0) {
                            for (B_ControlAuditoria objControlAuditoria : listControlAuditoria) {
                                ArrayList<B_Pregunta> listPreguntasControlIncorrectas = new ArrayList<B_Pregunta>();
                                boolean isRespuestaCumplimientoSI = false;
                                boolean isRespuestaCumplimientoNO = false;
                    %>
                    <div class="note note-info" style="border-color: #C3C3C3; background-color: #F5F5F5;">
                        <h4 class="block">Control de Auditoría: <%=objControlAuditoria.getCodigo() + " " + objControlAuditoria.getNombre()%></h4>
                        <%
                            //Obtenemos preguntas de cumplimiento
                            ArrayList<B_Pregunta> listPreguntasCumplimiento = DB_Pregunta.getListByIdControlAuditoriaAndIsCumplimiento(objControlAuditoria.getId(), true);
                            if (!listPreguntasCumplimiento.isEmpty()) {
                                for (B_Pregunta objPreguntaCumplimiento : listPreguntasCumplimiento) {
                                    //Obtenemos todos los tipos de evaluacion de la pregunta
                                    ArrayList<B_PreguntaTipoEvaluacion> listPreguntasCumplimientoTipoEvaluacion = DB_PreguntaTipoEvaluacion.getListByIdPregunta(objPreguntaCumplimiento.getId());
                                    if (!listPreguntasCumplimientoTipoEvaluacion.isEmpty()) {
                                        for (B_PreguntaTipoEvaluacion objPreguntaTipoEvaluacion : listPreguntasCumplimientoTipoEvaluacion) {
                                            if (objPreguntaTipoEvaluacion.getObjTipoEvaluacion().getId() == 1) {
                                                //Si el tipo de evaluación es igual a 1 encontes es pregunta de cumplimiento
                                                ArrayList<B_RespuestaAuditoria> listRespuestaAuditoria = DB_RespuestaAuditoria.getListByIdPreguntaTipoEvaluacion(objPreguntaTipoEvaluacion.getId());
                                                if (!listRespuestaAuditoria.isEmpty()) {
                                                    for (B_RespuestaAuditoria objRespuestaAuditoria : listRespuestaAuditoria) {
                                                        if (objRespuestaAuditoria.getObjTipoRespuesta().getId() == 1) {
                                                            //Si la respuesta es si, seteamos el flag
                                                            isRespuestaCumplimientoSI = true;
                                                        } else if (objRespuestaAuditoria.getObjTipoRespuesta().getId() == 2) {
                                                            //Si la respuesta es no, agregamos a la lista
                                                            listPreguntasControlIncorrectas.add(objPreguntaCumplimiento);
                                                            isRespuestaCumplimientoNO = true;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    } else {
                        %>
                        <div class="alert alert-warning">No se encontró tipo de evaluación para la pregunta de cumplimiento de este control de auditoría.</div>
                        <%
                                }
                            }
                        } else {
                        %>
                        <div class="alert alert-warning">No se encontró la pregunta de cumplimiento para este control de auditoría.</div>
                        <%
                            }
                            double porcentajeControl = 100;
                            ArrayList<B_Pregunta> listPreguntaPorcentajeControl = new ArrayList<B_Pregunta>();
                            if (isRespuestaCumplimientoSI) {
                                //Obtenemos preguntas de DEL CUMPLIMIENTO
                                ArrayList<B_Pregunta> listPreguntasDelCumplimiento = DB_Pregunta.getListByIdControlAuditoriaAndIsCumplimiento(objControlAuditoria.getId(), false);
                                if (!listPreguntasDelCumplimiento.isEmpty()) {
                                    for (B_Pregunta objPreguntaDelCumplimiento : listPreguntasDelCumplimiento) {
                                        //Obtenemos todos los tipos de evaluacion de la pregunta
                                        ArrayList<B_PreguntaTipoEvaluacion> listPreguntasDelCumplimientoTipoEvaluacion = DB_PreguntaTipoEvaluacion.getListByIdPregunta(objPreguntaDelCumplimiento.getId());
                                        if (!listPreguntasDelCumplimientoTipoEvaluacion.isEmpty()) {
                                            for (B_PreguntaTipoEvaluacion objPreguntaTipoEvaluacion : listPreguntasDelCumplimientoTipoEvaluacion) {
                                                if (objPreguntaTipoEvaluacion.getObjTipoEvaluacion().getId() != 1) {
                                                    //Si el tipo de evaluación es diferente a 1 encontes es pregunta del cumplimiento
                                                    ArrayList<B_RespuestaAuditoria> listRespuestaAuditoria = DB_RespuestaAuditoria.getListByIdPreguntaTipoEvaluacion(objPreguntaTipoEvaluacion.getId());
                                                    if (!listRespuestaAuditoria.isEmpty()) {
                                                        for (B_RespuestaAuditoria objRespuestaAuditoria : listRespuestaAuditoria) {
                                                            if (objRespuestaAuditoria.getObjTipoRespuesta().getId() == 2) {
                                                                //Si la respuesta es no, agregamos a la lista
                                                                listPreguntasControlIncorrectas.add(objPreguntaDelCumplimiento);
                                                                if (listPreguntaPorcentajeControl.isEmpty()) {
                                                                    listPreguntaPorcentajeControl.add(objPreguntaDelCumplimiento);
                                                                } else {
                                                                    int countPreguntaPorcentaje = 0;
                                                                    for (B_Pregunta B_PreguntaPorcentajeControl : listPreguntaPorcentajeControl) {
                                                                        if (B_PreguntaPorcentajeControl.getId() == objPreguntaDelCumplimiento.getId()) {
                                                                            countPreguntaPorcentaje++;
                                                                        }
                                                                    }
                                                                    if (countPreguntaPorcentaje == 0) {
                                                                        listPreguntaPorcentajeControl.add(objPreguntaDelCumplimiento);
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                for (B_Pregunta objPregunta : listPreguntaPorcentajeControl) {
                                    porcentajeControl -= objPregunta.getPesoItem();
                                }
                            }
                            if (isRespuestaCumplimientoNO) {
                                //Obtenemos preguntas de DEL CUMPLIMIENTO
                                ArrayList<B_Pregunta> listPreguntasDelCumplimiento = DB_Pregunta.getListByIdControlAuditoriaAndIsCumplimiento(objControlAuditoria.getId(), false);
                                if (!listPreguntasDelCumplimiento.isEmpty()) {
                                    for (B_Pregunta objPreguntaDelCumplimiento : listPreguntasDelCumplimiento) {
                                        listPreguntasControlIncorrectas.add(objPreguntaDelCumplimiento);
                                    }
                                }
                                listPreguntaPorcentajeControl = DB_Pregunta.getListByIdControlAuditoriaAndIsCumplimiento(objControlAuditoria.getId(), true);
                                porcentajeControl = 0;
                            }
                            if (isRespuestaCumplimientoSI && listPreguntasControlIncorrectas.isEmpty()) {
                        %>
                        <div class="alert alert-info">Se a cumplido satisfactoriamente con los requisitos de este control.</div>
                        <%
                        } else {
                            if (!listPreguntasControlIncorrectas.isEmpty()) {
                                String idsPreguntas = "";
                                for (int i = 0; i < listPreguntasControlIncorrectas.size(); i++) {
                                    B_Pregunta objPregunta = listPreguntasControlIncorrectas.get(i);
                                    if (i == 0) {
                                        idsPreguntas += objPregunta.getId();
                                    } else {
                                        idsPreguntas += "," + objPregunta.getId();
                                    }
                                }
                                ArrayList<B_Vulnerabilidad> listVulnerabilidad = DB_Vulnerabilidad.getListByIdsPreguntas(idsPreguntas);
                                if (!listVulnerabilidad.isEmpty()) {
                        %>
                        El control se encuentra implantado correctamente en un:
                        <div class="row">
                            <div class="col-xs-12 col-sm-11">
                                <div class="progress progress-striped active" style="margin-top: 10px">
                                    <div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="<%=porcentajeControl%>" aria-valuemin="0" aria-valuemax="100" style="width: <%=porcentajeControl%>%; background-color: <% if (porcentajeControl >= 70) {
                                            out.print("rgb(2, 158, 2)");
                                        } else if (porcentajeControl >= 30) {
                                            out.print("rgb(244, 177, 5)");
                                        } else if (porcentajeControl < 30) {
                                            out.print("red");
                                        }%>;">
                                        <span class="sr-only">
                                            <%=porcentajeControl%>% Complete </span>
                                    </div>
                                </div>
                            </div>
                            <div class="col-xs-12 col-sm-1"><%=porcentajeControl%>%</div>
                        </div>
                        <h4>Vulnerabilidades</h4>
                        <table class="table table-striped table-bordered table-hovered">
                            <thead>
                                <tr>
                                    <th>Nº</th>
                                    <th>Vulnerabilidad</th>
                                </tr>
                            </thead>
                            <tbody>
                                <%                                    for (int i = 0; i < listVulnerabilidad.size(); i++) {
                                        B_Vulnerabilidad objVulnerabilidad = listVulnerabilidad.get(i);
                                %>
                                <tr>
                                    <td><%=i + 1%></td>
                                    <td><%=objVulnerabilidad.getDescripcion()%></td>
                                </tr>      
                                <%
                                    }
                                %>
                            </tbody>
                        </table>
                        <%
                            String idsVulnerabilidades = "";
                            for (int i = 0; i < listVulnerabilidad.size(); i++) {
                                B_Vulnerabilidad objVulnerabilidad = listVulnerabilidad.get(i);
                                if (i == 0) {
                                    idsVulnerabilidades += objVulnerabilidad.getId();
                                } else {
                                    idsVulnerabilidades += "," + objVulnerabilidad.getId();
                                }
                            }
                            ArrayList<B_Amenaza> listAmenazas = DB_Amenaza.getListByIdsVulnerabilidades(idsVulnerabilidades);
                            if (!listAmenazas.isEmpty()) {
                        %>
                        <h4>Amenazas</h4>
                        <table class="table table-striped table-bordered table-hovered">
                            <thead>
                                <tr>
                                    <th>Nº</th>
                                    <th>Amenaza</th>
                                </tr>
                            </thead>
                            <tbody>
                                <%
                                    for (int i = 0; i < listAmenazas.size(); i++) {
                                        B_Amenaza objAmenaza = listAmenazas.get(i);
                                %>
                                <tr>
                                    <td><%=i + 1%></td>
                                    <td><%=objAmenaza.getDescripcion()%></td>
                                </tr>      
                                <%
                                    }
                                %>
                            </tbody>
                        </table>
                        <%
                                        }
                            
                            if (!listPreguntaPorcentajeControl.isEmpty()) {

                        %>
                        <h4>Observaciones</h4>
                        <table class="table table-striped table-bordered table-hovered">
                            <thead>
                                <tr>
                                    <th>Nº</th>
                                    <th>Aspecto a evaluar</th>
                                    <th>Observación</th>
                                    <th>Recomendación</th>
                                </tr>
                            </thead>
                            <tbody>
                                <%                                    for (int i = 0; i < listPreguntaPorcentajeControl.size(); i++) {
                                        B_Pregunta objPreguntaObs = listPreguntaPorcentajeControl.get(i);
                                %>
                                <tr>
                                    <td><%=i + 1%></td>
                                    <td><%=objPreguntaObs.getPregunta()%> Respuesta: No</td>
                                    <td><%=objPreguntaObs.getObservacion()%></td>
                                    <td><%=objPreguntaObs.getRecomendacion()%></td>
                                </tr>      
                                <%
                                    }
                                %>
                            </tbody>
                        </table>   
                        <%
                            }
                        
                                    }
                                }
                            }
                        %>
                    </div>
                    <%
                        }
                    } else {
                    %>
                    <div class="alert alert-warning">No existen Controles de Auditoría.</div>
                    <%
                        }
                    %>
                </div>
                <%
                    }
                } else {
                %>
                <div class="alert alert-warning">No existen Objetivos de Control de Auditoría.</div>
                <%
                    }
                %>
            </div>
            <%
                }
            } else {
            %>
            <div class="alert alert-warning">No existen Dominios de Auditoría.</div>
            <%
                }
            %>
        </div>
        <%
            }
        } else {
        %>
        <div class="alert alert-warning">No existen Criterios de Auditoría.</div>
        <%
            }
        } else {
        %>
        <div class="alert alert-warning">No existen auditorías activas.</div>
        <%
            }
        %>
    </div>
</div>
<!-- BEGIN PAGE LEVEL PLUGINS -->
<!-- END PAGE LEVEL PLUGINS -->
<!-- BEGIN PAGE SCRIPTS -->
<script src="assets/admin/pages/scripts/table-advanced.js"></script>
<script>
    jQuery(document).ready(function () {
        TableAdvanced.init();
    });
</script>

<!-- END PAGE SCRIPTS -->
<!-- END PAGE CONTENT-->
<% } else {

        out.print("<script language='Javascript'>"
                + "alert('Su sessión a expirado, ingrese nuevamente.');"
                + "window.location.href = 'index.jsp'"
                + "</script>");
    }%>